<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 构造函数Promise的方法  => 构造函数自己用  (Array.from   String.fromCharCode)
    // Promise.all()
    // Promise.race()
    // Promise.resolve()
    // Promise.reject()

    // Promise.race()
    // Promise.race()方法用于将多个 Promise 实例，包装成一个新的 Promise 实例。
    // var p = Promise.race([p1, p2, p3]);

    // 只要p1、p2、p3之中有一个实例率先改变状态(无论变为已成功 还是已失败)，p的状态就跟着改变。那个率先改变的 Promise 实例的返回值，就传递给p的回调函数。


    // 总结
    // 谁快谁先变,无论成功/失败

    // T = T1 / T2 / T3 最快的


    var p1 = getNumAsync(1, true, 2000);
    var p2 = getNumAsync(2, true, 3000);
    var p3 = getNumAsync(3, true, 1000);

    var p = Promise.any([p1, p2, p3]);

    p.then(arr => {
        console.log("已成功", arr);
    }).catch(err => {
        console.log("已失败", err);
    })



    function getNumAsync(val, isFulfilled = true, delay = 1000) {
        var p = new Promise(function (resolve, reject) {
            setTimeout(function () { // 1s后 变为 成功/失败状态 
                isFulfilled ? resolve(val) : reject(val);
            }, delay);
        })
        return p; // Promise <pending>
    }

</script>

</html>